01 Flask最小API服务
你用LangChain写好了一个Agent,在终端里跑得很开心。但问题是:这个Agent只能在你自己的电脑上用。
想让别人也能用?想让前端调用?想部署到服务器上?你需要给Agent加一个HTTP接口——也就是一个Web API服务。
Flask是Python生态中最轻量的Web框架,几行代码就能起一个API服务。对于Agent项目来说,Flask的优势是:够简单、够灵活、够轻量。你不需要学一大堆概念,就能把Agent包装成一个可以被任何客户端调用的服务。
打个比方:Agent是一个在后厨做菜的厨师,Flask就是餐厅的服务窗口——顾客在窗口点菜(发请求),厨师做菜(Agent处理),服务员把菜端出去(返回响应)。
一、安装Flask
pip install flask就这一行。Flask的依赖很少,安装很快。
验证一下:
python -c "import flask; print(flask.__version__)"能看到版本号就说明安装成功了。
二、最小应用
Flask最核心的API就两个东西:创建应用和定义路由。
from flask import Flask
# 创建Flask应用实例
app = Flask(__name__)
# 定义路由:当用户访问 "/" 时,执行下面的函数
@app.route("/")
def hello():
return "Agent服务已启动!"四行代码,一个可以运行的Web服务就写好了。逐行解释:
| 代码 | 作用 |
|---|---|
Flask(__name__) | 创建应用实例,__name__告诉Flask去哪里找资源文件 |
@app.route("/") | 路由装饰器,把URL路径/和下面的函数绑定 |
def hello() | 视图函数,处理请求并返回响应 |
return "..." | 返回的内容会发给客户端 |
三、运行服务
把上面的代码保存为app.py,然后用flask命令启动:
flask --app app run你会看到类似这样的输出:
* Serving Flask app 'app'
* Running on http://127.0.0.1:5000 (Press CTRL+C to quit)打开浏览器访问http://127.0.0.1:5000,就能看到"Agent服务已启动!"。
3.1 省事技巧
如果你的文件名就叫app.py或wsgi.py,可以省掉--app参数:
flask runFlask会自动找到app.py。
3.2 指定端口
默认端口是5000,如果被占用了可以换一个:
flask --app app run --port 80803.3 局域网可访问
默认只能本机访问(127.0.0.1)。想让同一局域网的其他设备也能访问:
flask --app app run --host 0.0.0.0这样别人通过你的IP地址就能访问到服务了。
四、Debug模式
开发阶段,每次改完代码都要手动重启服务很烦。开启Debug模式后,代码改了服务会自动重启,而且出错时会在浏览器里显示详细的错误信息。
flask --app app run --debug输出会多一行:
* Debug mode: on
* Restarting with stat
* Debugger is active!现在你改一下app.py保存,服务会自动重启,刷新浏览器就能看到最新效果。
注意:Debug模式只能用于开发环境,千万不要在生产环境开启。 因为Debug模式下的交互式调试器允许在浏览器里执行任意Python代码,这是一个严重的安全风险。
五、理解请求和响应
当用户访问http://127.0.0.1:5000/时,发生了什么?
用户浏览器 → 发送HTTP请求(GET /) → Flask收到请求 → 执行hello()函数 → 返回响应 → 用户看到页面整个过程就是:
- 用户发一个HTTP请求到Flask
- Flask根据URL找到对应的视图函数
- 视图函数执行,返回结果
- Flask把结果包装成HTTP响应发回去
对于Agent服务来说,这个流程变成:
客户端 → 发送POST请求(携带用户消息) → Flask → 调用Agent处理 → 返回Agent的回答六、第一个Agent API
来写一个真正能用的Agent接口。虽然现在还没接真正的Agent,但先把架子搭好:
from flask import Flask, request
app = Flask(__name__)
@app.route("/chat", methods=["POST"])
def chat():
# 从请求体中获取JSON数据
data = request.get_json()
user_message = data.get("message", "")
# 这里后面会替换成真正的Agent调用
reply = f"收到你的消息: {user_message}"
return {"reply": reply}
@app.route("/health")
def health():
"""健康检查接口"""
return {"status": "ok"}
if __name__ == "__main__":
app.run(debug=True)两个接口:
| 接口 | 方法 | 作用 |
|---|---|---|
/chat | POST | 接收用户消息,返回Agent回复 |
/health | GET | 健康检查,返回服务状态 |
测试一下:
# 健康检查
curl http://127.0.0.1:5000/health
# 发送消息
curl -X POST http://127.0.0.1:5000/chat \
-H "Content-Type: application/json" \
-d '{"message": "你好"}'返回结果:
{"reply": "收到你的消息: 你好"}一个Agent API的骨架就搭好了。后面只需要把reply = f"收到你的消息: {user_message}"替换成真正的Agent调用就行。
七、项目结构
实际项目中,推荐这样组织文件:
my-agent-api/
├── app.py # Flask应用入口
├── agent.py # Agent逻辑(LangChain等)
├── requirements.txt
└── .env # 环境变量(API Key等)目前我们只需要app.py就够了。随着后面功能增加,再逐步拆分。
八、总结
Flask最小API服务的核心就四个东西:
Flask(__name__):创建应用@app.route():定义路由request.get_json():获取请求数据return {}:返回JSON响应
几行代码就能把Agent包装成HTTP服务,这就是Flask的魅力。
在下一篇文章中,我们将学习路由和JSON响应的更多用法——动态URL、不同的HTTP方法、请求数据的多种获取方式,让你的Agent API更完善。